package juc;

import beans.Car;

import java.util.concurrent.atomic.AtomicReference;

/**
 * @author wuguojian
 * @description
 * @date 2022/6/15 上午10:24
 **/
public class UnsafeTest {

    private static final sun.misc.Unsafe U = sun.misc.Unsafe.getUnsafe();

    private int value = 1;

    public UnsafeTest() {
        try {
            // 获取字段偏移量，是字段相对于 Object 头部的偏移量，是一个相对的内存地址值，不是一个绝对的内存地址值
            // 需要注意静态字段属于类的成员，只有普通字段才属于对象成员
            long offsetValues = U.objectFieldOffset(UnsafeTest.class.getDeclaredField("value"));
            do{

            }while(!U.compareAndSwapInt(this, offsetValues,1 ,2));
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        }
    }

    public void test(){
        Car c = new Car();
        AtomicReference<Car> carRef = new AtomicReference<>();
        carRef.set(c);

    }

}
